/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.j002.requirementengineeringmuni;

import cz.muni.fi.j002.requirementengineeringmuni.entities.Card;
import java.util.List;
import java.util.Set;

/**
 *
 * @author stefan
 */
public interface Deck {

    /**
     * 
     * @return true if there are still cards to be drawn in the remaining cards set, otherwise returns false
     */
    boolean hasCardsLeft();
    
    /**
     * Moves a random card from a set of remaining cards to a set of drawn cards, returning the card
     * @throws IllegalStateException if there is no card to be drawn
     * @return
     */
    Card drawCard();
    
    /**
     *
     * @return a new unmodifiable List of drawn Cards
     */
    Set<Card> getDrawnCards();
    
    /**
     * 
     * @return a new unmodifiable List of remaining Cards
     */
    Set<Card> getRemainingCards();
    

}
